package com.ads.tpgrupo4.domain.cpr.cotizacion;

import java.math.BigDecimal;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import com.ads.tpgrupo4.domain.cpr.condicionesDeVentaAClientes.CondicionDeVentaAplicadaACliente;
import com.ads.tpgrupo4.domain.cpr.core.Cliente;
import com.ads.tpgrupo4.domain.cpr.core.PersistentObject;
import com.ads.tpgrupo4.domain.cpr.solicitudDeCotizacion.SolicitudDeCotizacion;

@Entity
public class Cotizacion extends PersistentObject {
	
	private static final long serialVersionUID = 1L;

	protected Long numero;
	
	private Date fecha;
	
	private EstadoCotizacion estadoCotizacion;
	
	@Embedded
	@AttributeOverrides( {
		@AttributeOverride(name="fecha", column = @Column(name="fecha_inicio_vigencia") ),
		@AttributeOverride(name="termino", column = @Column(name="dias_vigencia") )
		} )
	protected Vigencia vigencia;
	
	@OneToOne
	protected Cliente cliente;
	
	@OneToOne
	protected SolicitudDeCotizacion solicitudOrigen;
	
	@OneToMany(cascade = {CascadeType.ALL}, fetch=FetchType.EAGER)
	protected List<ItemCotizacion> items;
	
	@OneToMany(cascade = {CascadeType.ALL})
	private List<CondicionDeVentaAplicadaACliente> condicionesDeVentaAplicadas;
	
	protected BigDecimal iva;
	
	protected BigDecimal ingresosBrutos;
	
	public Cotizacion() {
		
		this.items = new LinkedList<ItemCotizacion>();
		this.estadoCotizacion = EstadoCotizacion.NO_REMITIDA;
	}
	
	public Long getNumero() {
		return numero;
	}
	
	public void setNumero(Long numero) {
		this.numero = numero;
	}
	
	public Vigencia getVigencia() {
		return vigencia;
	}
	
	public void setVigencia(Vigencia vigencia) {
		this.vigencia = vigencia;
	}
	
	
	public Cliente getCliente() {
		return cliente;
	}
	
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	
	public SolicitudDeCotizacion getSolicitudOrigen() {
		return solicitudOrigen;
	}
	
	public void setSolicitudOrigen(SolicitudDeCotizacion solicitudOrigen) {
		this.solicitudOrigen = solicitudOrigen;
	}

	public List<ItemCotizacion> getItems() {
		return items;
	}

	public void setItems(List<ItemCotizacion> items) {
		this.items = items;
	}

	public List<CondicionDeVentaAplicadaACliente> getCondicionesDeVentaAplicadas() {
		return condicionesDeVentaAplicadas;
	}

	public void setCondicionesDeVentaAplicadas(
			List<CondicionDeVentaAplicadaACliente> condicionesDeVentaAplicadas) {
		this.condicionesDeVentaAplicadas = condicionesDeVentaAplicadas;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public EstadoCotizacion getEstadoCotizacion() {
		return estadoCotizacion;
	}

	public void setEstadoCotizacion(EstadoCotizacion estadoCotizacion) {
		this.estadoCotizacion = estadoCotizacion;
	}
	
}
